package com.jhy.suixianglu.daima20221212;


/**
 * 题意：删除链表中等于给定值 val 的所有节点。
 * <p>
 * 示例 1：
 * 输入：head = [1,2,6,3,4,5,6], val = 6
 * 输出：[1,2,3,4,5]
 * <p>
 * 示例 2：
 * 输入：head = [], val = 1
 * 输出：[]
 * <p>
 * 示例 3：
 * 输入：head = [7,7,7,7], val = 7
 * []
 * 设置虚拟头节点
 */
public class RemoveLinkedElement {
    public ListNode removeElements(ListNode head, int val) {
        // 删除链表当中的元素可能是头节点 也有可能是其他的节点
        // 故我们要使用的是虚拟头节点 来预防我们删除的是头节点的情况
        if (head == null) {
            return head;
        }
        ListNode unreal = new ListNode(-1, head);
        ListNode pre = unreal;
        ListNode cur = head;
        // 这里记录的是cur当前的值
        while (cur != null) {
            // 如果当前值等于目标的值
            if (cur.val == val) {
                // 删除该节点
                pre.next = cur.next;
            } else {
                // 当前节点赋值为pre
                pre = cur;
            }
            cur = cur.next;
        }
        return unreal.next;
    }
}
